package HighMethod08;

import java.util.Locale;

/**
 * 解码方法
 * 这里的23-30行一定要理解并熟记，是个很好的逻辑思维
 */
public class EnCode {

    public static int numDecode(char[] str) {
        int len = str.length;
        if (len == 0 || str[0] == '\0') {
            return 0;
        }
        if (len == 1) {
            return 1;
        }

        int[] dp = new int[len + 1];        //要比字符数组长1
        dp[0] = 1;
        dp[1] = 1;       //初始化
        for (int i = 2; i <= len; i++) {
            if (str[i - 2] == '1' || (str[i - 2] == '2' && (str[i - 1] >= '0' && str[i - 1] <= '6'))) {
                dp[i] = dp[i] + dp[i - 2];  //如果“当前末尾”既str[i-1]是0,执行此操作，否则后续再处理
            }
            if (str[i - 1] != '0') {        //如果“当前末位”是0就不在操作，否则就要再加上dp[i-1]
                dp[i] = dp[i] + dp[i - 1];
            }
        }
        return dp[len];
    }

    public static void main(String[] args) {
        String str = "1220";
        System.out.println("存在的解码次数：" + numDecode(str.toCharArray()));
    }
}
